function ajax(url) {
    return new Promise(function(resolve, reject) {
        // foo() 可以捕获到异常
        var xhr = new XMLHttpRequest()
        xhr.open('GET',url)
        xhr.responseType = 'json'
        xhr.onload = function() {
            if(this.status === 200) {
                resolve(this.response)
            }else {
                reject(new Error(this.statusText))
            }
        }
        xhr.send()
    }) 
}
// 常用的 promise 静态方法
// promise.resolve() 作用就是快速把一个值转化为一个promise对象
Promise.resolve("foo")
    .then(function(value) {
        console.log(value)
    })
// 等价于
new Promise(function(resolve, reject) {
    resolve('foo')
})
// 如果primse.resolve()参数传一个promise对象 他会 返回原对象
var promise = ajax('/api/users.json')
var promise2 = Promise.resolve(promise)
console.log(promise === promise2)

// 如果我们传入的是个对象，有then方法(他是以额可以被then的对象)，这样的对象耶可以作为promise来执行
Promise.resolve({
    then: function(onFulfilled, onRejected) {
        onFulfilled('foo1')
    }
})
.then(function(value) {
    console.log(value)
})

// -----------还有一个与之对应的 Promise.reject() 它的意思是快速创建一个失败的promise对象
// 无论传入什么参数都会作为 这个promise失败的原因
Promise.reject(new Error('rejected'))
    .catch (function(error) {
        console.log(error)
    })
